﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using csharp.rad.general;
using ComponentFactory.Krypton.Toolkit;

namespace csharp.rad.GOVhotel
{
    public partial class LançBlindex : KryptonForm
    {
        Database myDBase;
        int antFunço = 0, antApto = 0, códFunço;

        public LançBlindex(Database myDBase)
        {
            InitializeComponent();
            this.myDBase = myDBase;
        }

        private void Form_Load(object sender, EventArgs e)
        {
            Apartamentos rolApto = new Apartamentos(myDBase);
            int dbRet =  rolApto.ListaBlindex();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                    + "referência: LançBlindexLoadApto" + "\n" + rolApto.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            for (int apt = 0; apt < rolApto.Items.Count; apt++)
            {
                viewApto.Items.Add(rolApto.Items[apt].Apto.ToString(), rolApto.Items[apt].Apto.ToString("0_000"), 0);
            }
            Cameiras rolCame = new Cameiras(myDBase);
            dbRet = rolCame.ListaFunço();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                    + "referência: LançBlindexLoadFunço" + "\n" + rolCame.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            for (int xx = 0; xx < rolCame.Items.Count; xx++)
            {
                viewFunço.Items.Add(rolCame.Items[xx].Código.ToString(), rolCame.Items[xx].Nome, 0);
            }
            datador.Value = DateTime.Today;
            datador.MinDate = DateTime.Today.AddDays(-90);
            datador.MaxDate = DateTime.Today;
            viewFunço.Focus();
        }

        private void Form_Monta_Operações()
        {
            Operações tabOpera = new Operações(myDBase);
            tabOpera.Data = datador.Value;
            int dbRet = tabOpera.ListaDiaBlindex();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                    + "referência: LançBlindexLoadOpera" + "\n" + tabOpera.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            for (int xx = 0; xx < tabOpera.Items.Count; xx++)
            {
                Cameira queCame = new Cameira(myDBase);
                queCame.Código = Convert.ToInt32(tabOpera.Items[xx].Cameira_1.ToString());
                dbRet = queCame.Obter();
                if (dbRet != 0)
                {
                    MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                        + "referência: LançBlindexMontaCame_1" + "\n" + queCame.MsgErro,
                        "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                String blkApto = tabOpera.Items[xx].Local.ToString("0_000");
                listaAções.Rows.Add(tabOpera.Items[xx].Número.ToString(), queCame.Nome,
                    tabOpera.Items[xx].Local.ToString("0_000"));
            }
        }

        private void datador_ValueChanged(object sender, EventArgs e)
        {
            listaAções.Rows.Clear();
            Form_Monta_Operações();
        }

        private void viewFunço_Click(object sender, EventArgs e)
        {
            viewFunço.Items[antFunço].ImageIndex = 0;
            viewFunço.Items[antFunço].BackColor = SystemColors.Control;
            int qIdx = viewFunço.SelectedIndices[0];
            códFunço = Convert.ToInt32(viewFunço.Items[qIdx].Name);
            viewFunço.Items[qIdx].ImageIndex = 1;
            viewFunço.Items[qIdx].BackColor = SystemColors.GradientActiveCaption;
            antFunço = qIdx;
            janApto.Enabled = true;
            janApto.Focus();
        }

        private void viewFunço_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.KeyCode == Keys.Space) viewFunço_Click(sender, e);
        }

        private void viewApto_Click(object sender, EventArgs e)
        {
            int qIdx = viewApto.SelectedIndices[0];
            viewApto.Items[antApto].ImageIndex = 0;
            viewApto.Items[antApto].BackColor = SystemColors.Control;
            viewApto.Items[qIdx].ImageIndex = 1;
            viewApto.Items[qIdx].BackColor = SystemColors.GradientActiveCaption;
            viewApto.Items[qIdx].Selected = false;
            antApto = qIdx;
            cmdOK.Enabled = true; 
        }

        private void cmdOK_Click(object sender, EventArgs e)
        {
            cmdOK.Enabled = false;
            Operação regOpera = new Operação(myDBase);
            regOpera.Data = datador.Value;
            regOpera.Cameira_1 = códFunço;
            regOpera.Cameira_2 = 0;
            regOpera.Local = Convert.ToInt32(viewApto.Items[antApto].Name);
            regOpera.Ação = 8;
            int dbRet = regOpera.Insert();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                    + "referência: LançBlindexOK" + "\n" + regOpera.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            listaAções.Rows.Add(regOpera.Número.ToString(), viewFunço.Items[antFunço].Text, 
                viewApto.Items[antApto].Text);
            listaAções.FirstDisplayedScrollingRowIndex = listaAções.Rows.Count - 1;
            viewApto.Items[antApto].Selected = false;
            viewApto.Items[antApto].BackColor = SystemColors.Control;  
        }

        private void listaAções_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Space) listaAções_DoubleClick(null, null);
        }

        private void listaAções_DoubleClick(object sender, EventArgs e)
        {
            int qRow = listaAções.CurrentRow.Index;  
            DialogResult resp = MessageBox.Show("Você confirma a exclusão de:\n"
                + listaAções.Rows[qRow].Cells[1].Value.ToString() + " no Apartamento "
                + listaAções.Rows[qRow].Cells[2].Value.ToString() + " ?",
                "Excluir lançamento do dia " + datador.Value.ToString("dd/MMMM"),
                MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
            if (resp == DialogResult.No) return;
            string nmLoc = listaAções.Rows[qRow].Cells[2].Value.ToString();
            nmLoc = nmLoc.Remove(1, 1);
            Operação estaOpera = new Operação(myDBase);
            estaOpera.Local = Convert.ToInt32(nmLoc);
            estaOpera.Data = datador.Value;
            estaOpera.Número = Convert.ToInt32(listaAções.Rows[qRow].Cells[0].Value.ToString());
            int dbRet = estaOpera.Delete();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                    + "referência: LançBlindexExcluir\n" + estaOpera.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            listaAções.Rows.RemoveAt(qRow);
        }
    }
}
